Modern computing systems such as smartphones, tablets, and other mobile devices enable users to install and run various applications. These mobile applications typically provide a wide range of functionality, such as streaming video, social networking, games, email, instant messaging, weather, navigation, or any other mobile application.
Computing systems are capable of executing various types and formats of program instruction code associated with an application, including native code and bytecode versions. Native code may be defined as computer programming instructions that are compiled to run on a particular processor and its instruction set. When executed on its native processor, native code requires no additional processing or interpretation in order to run. As such, an application may be referred to as “native” to a particular computing system when the application program code has been developed and/or compiled such that it is executable by a processor of the computing system without requiring an interpreter or any other translation. Bytecode, also known as portable code, is a more generic form of program instructions designed for execution by a software interpreter. A bytecode program may be executed by parsing and directly executing the instructions individually, line by line. Bytecode programs may be processed and compiled into native code implementations for specific processors and instruction sets to improve efficiency and execution speed.
In various runtime environments, it is possible to modify how a method, function, class, or other such software component maps to the actual code implementation of the component. Sometimes referred to as swizzling, such re-mapping technology allows code associated with one function to be replaced by code associated with another function. This may be useful in the context of making modifications to a user interface of an application, for example. Some implementations of re-mapping technology involve modifying the value of a pointer that points to a location in memory where a method is implemented in code. By changing the value of the pointer, the method can be made to point to other code such that, when the method is called, a different method is employed in its place. The target method that is called in place of the original method is sometimes referred to as a callback function. Such techniques may enable a software development kit (SDK) to make modifications to an application without altering the main program code of the application.